package br.edu.delta.dao;

import javax.ejb.Stateless;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import br.edu.delta.model.Devolucao;
import br.edu.delta.model.Emprestimo;
import br.edu.delta.model.Livro;
import br.edu.delta.util.Util;

/**
 * <p>
 * <b>Title:</b> DevolucaoDAO
 * </p>
 * 
 * <p>
 * <b>Description:</b> DevolucaoDAO
 * </p>	
 * 	
 * <p>	
 * <b>Company: </b> 
 * </p>	
 * 	
 * @author Denis
 * 
 * @version 1.0.0
 */
@Stateless
public class DevolucaoDAO extends AppDAO<Devolucao> {

	/** Atributo serialVersionUID. */
	private static final long serialVersionUID = -1L;

	public boolean isLivroDevolvido(Long idLivro, Long idEmprestimo) {
		
		Criteria criteria = novaCriteria();
		
		criteria.add(Restrictions.eq("emprestimo.id", idEmprestimo));
		
		criteria.add(Restrictions.eq("livro.id", idLivro));
		
		criteria.setMaxResults(1);
		
		Devolucao devolucao = (Devolucao) criteria.uniqueResult();

		return !Util.isNullOuVazio(devolucao) ? true : false;
	}

	public boolean isPossueLivroPendentesDevolucao(Emprestimo emprestimo) {
		
		boolean retorno = false;
		
		for (Livro livro : emprestimo.getLivros()) {
			
			Criteria criteria = novaCriteria();
			
			criteria.createAlias("livro", "livro");
			
			criteria.add(Restrictions.eq("emprestimo.id", emprestimo.getId()));
			
			criteria.add(Restrictions.eq("livro.id", livro.getId()));
			
			Devolucao devolucao = (Devolucao) criteria.uniqueResult();
			
			retorno = Util.isNullOuVazio(devolucao) ? true : false;
		}
		
		return retorno;
	}
	
}
